import random
import statistics
from base import Pairing, get_size, BoardState
from strategy import PairingDecisionDelegate, random_decision

def get_score(n: int) -> float:
    return 1 / get_size(n)

def roll_dice() -> tuple[int, int, int, int]:
    return tuple(random.randint(1, 6) for _ in range(4))

def get_pairings(dices: tuple[int, int, int, int]) -> tuple[Pairing, Pairing, Pairing]:
    pairing1 = (dices[0] + dices[1], dices[2] + dices[3])
    pairing2 = (dices[0] + dices[2], dices[1] + dices[3])
    pairing3 = (dices[0] + dices[3], dices[1] + dices[2])
    return (pairing1, pairing2, pairing3)

def update_board_state(board_state: BoardState, pairing: Pairing) -> BoardState:
    board_state = board_state.copy()

def simulate_until_bust(board_state: BoardState, pairing_selector: PairingDecisionDelegate)